// 这道题和 1296. 划分数组为连续数字的集合 一模一样
package main

import "sort"

func isNStraightHand(hand []int, groupSize int) bool {
	n := len(hand)
	// 首先不能直接分组 肯定是错的
	if n%groupSize != 0 {
		return false
	}
	// 对数据进行排序
	sort.Ints(hand)
	// 这么大的数据规模~~ 没想到还是得统计
	cnt := map[int]int{}
	for _, num := range hand {
		cnt[num]++
	}
	// 因为排顺序过，依次从头遍历找到最小的数字，判断是否连贯
	for _, x := range hand {
		if cnt[x] == 0 {
			continue
		}
		for num := x; num < x+groupSize; num++ {
			if cnt[num] == 0 {
				return false
			}
			cnt[num]--
		}
	}
	return true
}
